bitkeeper revision 1.1550.1.4 (4294b3735gOYxynlbg6ebX3oag6sHQ)
authorcl349@firebug.cl.cam.ac.uk <cl349@firebug.cl.cam.ac.uk>
Wed, 25 May 2005 17:18:43 +0000 (17:18 +0000)
committercl349@firebug.cl.cam.ac.uk <cl349@firebug.cl.cam.ac.uk>
Wed, 25 May 2005 17:18:43 +0000 (17:18 +0000)
relocate.py, SrvDomain.py, XendDomain.py:
  Support vm relocation using XendCheckpoint.
Signed-off-by: Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
tools/python/xen/xend/XendDomain.py
tools/python/xen/xend/server/SrvDomain.py
tools/python/xen/xend/server/relocate.py

index 55553809d3f6553fe26d169ca774a1e40aab8c62..8bc5092e18c31fb0b4920961513c4aa214aa484d 100644 (file)
@@ -14,6 +14,7 @@ import time
 
 import xen.lowlevel.xc; xc = xen.lowlevel.xc.new()
 
+from xen.xend.server import relocate
 import sxp
 import XendRoot; xroot = XendRoot.instance()
 import XendCheckpoint
@@ -510,6 +511,11 @@ class XendDomain:
         # Need a cancel too?
         # Don't forget to cancel restart for it.
         dominfo = self.domain_lookup(id)
+
+        port = xroot.get_xend_relocation_port()
+        sock = relocate.setupRelocation(dst, port)
+
+        XendCheckpoint.save(self, sock.fileno(), dominfo)
         return None
 
     def domain_save(self, id, dst, progress=False):
index 42531d54abfcfd76c9e5c0f467e0a70954130010..eb05c17d36e53b9365ddbd2354b174e0be9ec41a 100644 (file)
@@ -75,15 +75,7 @@ class SrvDomain(SrvDir):
                      ['destination', 'str'],
                      ['live',        'int'],
                      ['resource',    'int']])
-        info = fn(req.args, {'dom': self.dom.id})
-        #req.setResponseCode(http.ACCEPTED)
-        host = info.dst_host
-        port = info.dst_port
-        dom  = info.dst_dom
-        url = "http://%s:%d/xend/domain/%d" % (host, port, dom)
-        req.setHeader("Location", url)
-        print 'do_migrate> url=', url
-        return url
+        return fn(req.args, {'dom': self.dom.id})
 
     def op_pincpu(self, op, req):
         fn = FormFn(self.xd.domain_pincpu,
index f41872c385da8e6408b75856b56a4435ff185ce4..07cd5e7fbb1229ee30d4174f30cadaa91d24929f 100644 (file)
@@ -1,3 +1,5 @@
+
+import socket
 import sys
 import StringIO
 
@@ -123,3 +125,15 @@ def listenRelocation():
         port = xroot.get_xend_relocation_port()
         interface = xroot.get_xend_relocation_address()
         reactor.listenTCP(port, factory, interface=interface)
+
+def setupRelocation(dst, port):
+    try:
+        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+        sock.connect((dst, port))
+    except socket.error, err:
+        raise XendError("can't connect: %s" % err[1])
+
+    sock.send("receive\n")
+    print sock.recv(80)
+
+    return sock